"""事件管理"""
import settings
import time

"""
events = [
    0{
        'input_class':ManageEvent | 键盘组件                                          输入设备对象
        'behavior': str                                                             对象行为
        'time':int                                                                  一个组件执行完成后等待时间
    },
    1{
    }
]
"""
# 事件管理循环者
class ManageEvent:
    def __init__(self,events):
        self.events = events
        # 初始化构建字典
        self.type_handlers = {
            'mouse': self._handle_mouse_event,           # 鼠标事件 → 处理函数
            'keyboard': self._handle_keyboard_event,     # 键盘事件 → 处理函数
        }
        # 行为处理器映射
        self.behavior_handlers = {
            # 鼠标行为
            '点击': lambda obj: obj.click(),            # 点击行为 → 执行click()
            '拖拽': lambda obj: obj.drag(),              # 拖拽行为 → 执行drag()
            '滚动': lambda obj: obj.roll(),              # 滚动行为 → 执行roll()
            # 键盘行为
            'tap': lambda obj: obj.tap(),                # 按键点击 → 执行tap()
            'strand': lambda obj: obj.strand(),          # 输入字符 → 执行strand()
            'press': lambda obj: obj.press(),            # 长按按键 → 执行press()
            'key_group': lambda obj: obj.key_group(),    # 组合键   → 执行key_group()
        }

    def start(self):
        """事件主循环"""
        while self.events:
            event = self.events.pop(0)
            input_obj = event.get('input_class')

            component_type = getattr(input_obj, 'typea', None)  # 动态查询属性
            handler = self.type_handlers.get(component_type)
            handler(event)                                      # 调用对应的处理函数

            time.sleep(settings.WAIT_TIME)                      # 循环睡眠时间

    def _handle_mouse_event(self, event):
        """处理鼠标事件"""
        behavior = event.get('behavior')                        # 获取行为类型
        input_obj = event.get('input_class')                    # 获取输入对象

        # 再次查字典：找到具体的行为函数
        action = self.behavior_handlers.get(behavior)
        if action:
            action(input_obj)                                   # 执行具体行为
            if event['time']:
                time.sleep(event['time'])                       # 睡眠时间

    def _handle_keyboard_event(self, event):
        """处理键盘事件"""
        behavior = event.get('behavior')                        # 获取行为类型
        input_obj = event.get('input_class')                    # 获取输入对象

        # 再次查字典：找到具体的行为函数
        action = self.behavior_handlers.get(behavior)
        if action:
            action(input_obj)
            if event['time']:
                time.sleep(event['time'])                        # 睡眠时间